from django.urls import reverse
from django.utils import timezone
from .models import Question
import datetime
from django.test import TestCase

'''测试就是假装一些管理员的输入，然后通过用户端的表现是否符合预期来判断新加入的改变受否破坏了原有的系统状态'''
def create_question(question_text, days):
    '''使用给定的 `question_text` 创建一个问题并发布
     给定的“天数”偏移到现在（对于已发布的问题是否定的
     在过去，对于尚未发表的问题是积极的） 它封装了创建投票的流程，减少了重复代码'''
    time = timezone.now() + datetime.timedelta(days=days)
    return Question.objects.create(question_text=question_text, pub_date=time)

class QuestionIndexViewTests(TestCase):
    '''没有创建任何投票，它检查返回的网页上有没有 "No polls are available." 这段消息和 latest_question_list 是否为空 '''
    def test_no_questions(self):
        response = self.client.get(reverse('polls:index'))
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'No polls are available.')

        self.assertQuerysetEqual(response.context['latest_question_list'], [])

    def test_past_question(self):
        '''创建了一个投票并检查它是否出现在列表中 '''
        create_question(question_text='Past question.', days=-30)
        response = self.client.get(reverse('polls:index'))
        self.assertQuerysetEqual(response.context['latest_question_list'], ['<Question:Past question.>'])

    def test_future_question(self):
        '''带有 pub_date 未来的问题不会显示在
         索引页。'''
        create_question(question_text='Future question.', days=30)
        response = self.client.get(reverse('polls:index'))
        self.assertContains(response, 'No polls are available.')
        self.assertQuerysetEqual(response.context['latest_question_list'], [])

    def test_future_question_and_past_question(self):
        '''即使过去和未来的问题都存在，也只有过去的问题
         显示。 '''
        create_question(question_text='Past question.', days=-30)
        create_question(question_text='Future question.', days=30)
        response = self.client.get(reverse('polls:index'))
        self.assertQuerysetEqual(response.context['latest_question_list'],['<Question:Past question.>'])

    def test_two_past_questions(self):
        '''问题索引页可以显示多个问题。 '''
        create_question(question_text='Past question 1.css.', days=-30)
        create_question(question_text='Past question 2.', days=-5)
        response = self.client.get(reverse('polls:index'))
        self.assertQuerysetEqual(response.context['latest_question_list'],['<Question:Past question 2.>', '<Question:Past question 1.css.>'])